package algo3Man;

import java.util.List;

import controller.ControladorJuego;
import controller.ControladorPacman;
import controller.TecladoListener;
import model.Laberinto;
import model.Pacman;
import model.colisiones.Colisiones;
import model.fantasmas.Fantasma;
import model.movimiento.MovimientoIzquierda;
import view.DibujadorElementos;
import view.Score;
import view.Vista;
import view.VistaPacman;
import ar.uba.fi.algo3.titiritero.Dibujable;

public class Algo3Man {


	public static void main(String[] args) {

		Laberinto laberinto = new Laberinto(1);
		Pacman pacman = new Pacman(laberinto, new MovimientoIzquierda());
		laberinto.setPacman(pacman);
		
		ControladorJuego controlador = new ControladorJuego();
		ControladorPacman controladorP = new ControladorPacman(pacman);
		
		Vista ventana = new Vista(laberinto.getAncho(),laberinto.getAlto(),controlador);
	
		controlador.setSuperficieDeDibujo(ventana.getSuperficieDeDibujo());
		
		ventana.setVisible(true);
		
		iniciarVista(laberinto, pacman, controlador);		
		
		controlador.agregarKeyEventObservador(controladorP);
		ventana.addKeyListener(new TecladoListener(controlador));
		
		Score puntaje;
		puntaje=ventana.getScorePanel();
		puntaje.setPuntaje(laberinto.getPuntajeReferencia());
		puntaje.setVidas(laberinto.getVidasReferencia());
		controlador.agregarObjetoVivo(puntaje);//agrego el puntaje
		
		
		
		controlador.setIntervaloSimulacion(20);		
		controlador.comenzarJuego();

		}

	private static void iniciarVista(Laberinto laberinto, Pacman pacman,
			ControladorJuego controlador) {
		
		List<Dibujable> objetosLaberinto;
		List<Dibujable> objetosFantasmas;
		DibujadorElementos dibujador;
		objetosLaberinto = laberinto.getDibujables();
		for(int i=0;i<objetosLaberinto.size();i++){
			
			controlador.agregarDibujable(objetosLaberinto.get(i));
		}
		
		objetosFantasmas = laberinto.getFantasmasDibujables();
		for(int i=0;i<objetosFantasmas.size();i++){
			
			controlador.agregarDibujable(objetosFantasmas.get(i));
		}
		//Ini Pacman
		VistaPacman vistaPacman = new VistaPacman(pacman);
		vistaPacman.setPosicionable(pacman);
		controlador.agregarObjetoVivo(pacman);
		controlador.agregarDibujable(vistaPacman);
        //Fin Pacman
		List<Fantasma> listaFantasmas = laberinto.getFantasmas();
		for(int i=0;i<listaFantasmas.size();i++){
			
			controlador.agregarObjetoVivo(listaFantasmas.get(i));
		}	
		objetosFantasmas.add(vistaPacman);
		dibujador = new DibujadorElementos(objetosLaberinto, objetosFantasmas);
		controlador.agregarObjetoVivo(dibujador);
		
		Colisiones colisiones = new Colisiones(pacman,laberinto.getFantasmas(),laberinto,controlador);
		controlador.agregarObjetoVivo(colisiones);
	}

		
}
